UE4之判断点是否在矩形内 | 您所在的位置:网站首页 › mongodb42 判断点位是否在多变形内 › UE4之判断点是否在矩形内 |
向量点乘的几何意义
向量点乘的数学定义: 向量点乘的几何意义: 所以向量的点乘可以用来计算两个向量之间的夹角。当夹角在0-90度之间,值为正数,在90-180之间,为负数 利用向量点乘计算点在矩形内参考: https://blog.csdn.net/faithmy509/article/details/82803646 所以如下图:
如下面的公式: 以为P1点和P3点,计算p点与长方形三条边的夹角都是在0-90度之间,那就是都大于0,就可以判断点在矩形内部。 向量叉乘的几何意义这里只讨论二位向量,三维的太复杂了。 向量A(x1,y1)和向量B(x2,y2)叉乘:A(x1,y1)xB(x2,y2) = x1y2-x2y1 值的绝对值是两向量同起点,构成平行四边形的面积 值为正,(x2,y2)在(x1,y1)逆时针方向 值为负,(x2,y2)在(x1,y1)顺时针方向 值为0,(x2,y2)和(x1,y1)共线 所以再来理解一下上面这段话 补充一个图,大概就明白了:看下面两个角度,一个是逆时针,一个是顺时针,所以为负数。 最后上别人的一段代码,作为参考: class Point: def __init__(self, x, y): self.x = x self.y = y def GetCross(p1,p2,p): return (p2.x-p1.x)*(p.y-p1.y)-(p.x-p1.x)*(p2.y-p1.y) def GetDot(p1,p2,p): return (p2.x-p1.x)*(p.x-p1.x)+(p2.y-p1.y)*(p.y-p1.y) def IsPointInMatrix(p): p1 = Point(0, 5) p2 = Point(0, 0) p3 = Point(5, 0) p4 = Point(5, 5) return GetCross(p1,p2,p)*GetCross(p3,p4,p) >= 0 and GetCross(p2,p3,p) * GetCross(p4,p1,p) >= 0 pa = Point(-1, -1) print(IsPointInMatrix(pa)) pb = Point(-1, 1) print(IsPointInMatrix(pb)) pc = Point(1, 1) print(IsPointInMatrix(pc)) pd = Point(1, -1) print(IsPointInMatrix(pd)) def IsPointInMatrix2(p): p1 = Point(0, 5) p2 = Point(0, 0) p3 = Point(5, 0) p4 = Point(5, 5) return GetDot(p1,p2,p) >= 0 and GetDot(p1,p4,p) >= 0 and GetDot(p3,p4,p) >=0 and GetDot(p3,p2,p) >= 0 pa = Point(-1, -1) print(IsPointInMatrix2(pa)) pb = Point(-1, 1) print(IsPointInMatrix2(pb)) pc = Point(1, 1) print(IsPointInMatrix2(pc)) pd = Point(1, -1) print(IsPointInMatrix2(pd))
|
CopyRight 2018-2019 实验室设备网 版权所有 |